package departmentenum

import (
	"yunj/pkg/yunj/core/enum"
)

// 定义部门岗位类型常量
const (
	// 主要负责人
	POSTION_TYPE_MAIN uint8 = 11

	// 次要负责人
	POSTION_TYPE_SECONDARY uint8 = 22

	// 其他
	POSTION_TYPE_OTHER uint8 = 0
)

// 11 主要负责人、22 次要负责人、0 通用

// 部门岗位类型
// 实现EnumInerface接口
type PostionType struct {
	enum.Enum[uint8]
}

func (e *PostionType) AllConstAttrs() map[uint8]map[string]any {
	return map[uint8]map[string]any{
		POSTION_TYPE_MAIN: {
			"desc":  "主要负责人",
			"sort":  1,
			"color": "#16b777",
		},
		POSTION_TYPE_SECONDARY: {
			"desc":  "次要负责人",
			"sort":  2,
			"color": "#16baaa",
		},
		POSTION_TYPE_OTHER: {
			"desc":  "通用",
			"sort":  3,
			"color": "#1e9fff",
		},
	}
}

// instanceCache 存储已经创建的实例
var postionTypeInstanceCache = make(map[uint8]*PostionType)

// 根据value获取枚举
func PostionTypeByValue(value uint8) *PostionType {
	if instance, exists := postionTypeInstanceCache[value]; exists {
		return instance
	}
	e := &PostionType{}
	enum.SetEnumInstance(&e.Enum, e, value)
	postionTypeInstanceCache[value] = e
	return e
}

var PostionTypeEnum *PostionType = func() *PostionType {
	e := &PostionType{}
	enum.SetEnumInstance(&e.Enum, e)
	return e
}()
